# -*-coding: UTF-8 -*-

from FrogLabModel import *
from FrogLabVue import *
from Tkinter import *
import time

class FrogLabControleur:
    def __init__(self,nomJoueur,modele,vue):
        self.FPS=12
        self.modele=modele
        self.vue=vue
        self.vue.setControleur(self)
        #while (not self.modele.commence):
        #    print "sleeping"
        #    time.sleep(1)
        #self.vue.setBindings()
        self.vue.setTimer(1000/self.FPS, self.update)
        self.modele.lab
        self.nom=nomJoueur

    def update(self):
        #print("FrogLabControleur::update()")
        self.modele.update()
        self.vue.setTimer(1,self.vue.render())
        if not self.modele.doitQuitter():
            self.vue.setTimer(1000/self.FPS, self.update)
        else:
            self.modele.quitterPartie(self.nom)

    def getLargeurLabyrinthe(self):
        return self.modele.getLabyrinthe().getLargeur()

    def getHauteurLabyrinthe(self):
        return self.modele.getLabyrinthe().getHauteur()

    def getEntree(self):
        return self.modele.getLabyrinthe().getEntree()

    def getBiere(self):
        return self.modele.getBiere()

    def getSurprises(self):
        return self.modele.getSurprises()

    def murNord(self,x,y):
        return self.modele.getLabyrinthe().murNord(Point(x,y))

    def murSud(self,x,y):
        return self.modele.getLabyrinthe().murSud(Point(x,y))

    def murOuest(self,x,y):
        return self.modele.getLabyrinthe().murOuest(Point(x,y))

    def murEst(self,x,y):
        return self.modele.getLabyrinthe().murEst(Point(x,y))
    
    def mapDirection(self,dir):
        if dir == NORTH:
            return 0
        if dir == SOUTH:
            return 1
        if dir == EAST:
            return 2
        if dir == WEST:
            return 3
            
    # Retourne un dictionnaire { "nom de joueur", direction }
    def getDirections(self):
        dict={}
        for nom,direction in self.modele.getDirections().items():
            dict[nom]=self.mapDirection(direction)
        return dict
    
    # Retourne une liste de noms des joueurs.
    def getNomsJoueurs(self):
        return self.modele.getNomsJoueurs();
    
    def getJoueursInfos(self):
        return self.modele.getJoueursInfos();
    
    def getPositionJoueur(self,nomJoueur):
        return [self.modele.getPositionJoueur(nomJoueur).x,self.modele.getPositionJoueur(nomJoueur).y]
        
    def estGele(self,nomJoueur):
        return self.modele.estGele(nomJoueur)
    
    def getTempsRestant(self):
        return self.modele.getTempsRestant()

    def deplacementHaut(self):
        self.modele.deplacement(1,self.nom)

    def deplacementBas(self):
        self.modele.deplacement(4,self.nom)

    def deplacementGauche(self):
        self.modele.deplacement(2,self.nom)

    def deplacementDroite(self):
        self.modele.deplacement(8,self.nom)

    def activerSurprise(self):
        self.modele.activerSurprise(self.nom)

    def quit(self):
        #enlever les timers ici
        print("termine")
        self.termine=True

if __name__ == '__main__':
    pass
    # Pour rouler le programme en test, partir TestFrogLab.py dans src/
    #root = Tk()
    #modele=ModelFrogLab()
    #vue=FrogLabVue(root)
    #controleur = FrogLabControleur(None,modele,vue)
    #root.mainloop()
